package com.zq.多线程设计模式.Future设计模式;

/**
 * @author Jiu
 * @description：future
 * @date 2021/04/07   13:21
 *
 * 它的核心思想是异步调用。
 * 对于Future模式来说，它无法立即返回你需要的数据，但是它会返回一个契约，将来你可以凭借这个契约去获取你需要的信息。
 * Future模式可以简单理解成：我有一个任务，它比较耗时，但是我又不想一直空等，而且有时候任务的结果并不立刻需要，
 * 于是我把这任务提交给了Future，Future替我完成这个任务，同时Future将这个任务订单的信息返回给我。那么我就可以不用等了，
 * 自己可以去做任何想做的事情。当我需要这个任务结果的时候，我可以根据返回的订单信息，
 * 尝试从Future那里去取出该任务的结果（当然如果此时还未完成，则会阻塞）。
 *
 **/
public class Main {
    public static void main(String[] args) {
        Client client = new Client();
        // 这里会立即返回，因为获取的是FutureData，而非RealData
        Data data = client.request("name");
        System.out.println("请求完毕");

        try {
            // 这里可以用一个sleep代替对其他业务逻辑的处理
            // 在处理这些业务逻辑过程中，RealData也正在创建，从而充分了利用等待时间
            Thread.sleep(2000);

            // 使用真实数据
            System.out.println("数据=" + data.getResult());
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}
